package com.example.webupload.service;

import com.example.webupload.dto.ChunkMergeDTO;
import com.example.webupload.dto.ChunkUploadDTO;
import com.example.webupload.dto.FileUploadDTO;
import com.example.webupload.entity.FileInfo;
import com.example.webupload.vo.FileInfoVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 文件服务接口
 */
public interface FileService {

    /**
     * 上传文件
     *
     * @param fileUploadDTO 文件上传DTO
     * @param request       HTTP请求
     * @return 文件信息
     */
    FileInfoVO uploadFile(FileUploadDTO fileUploadDTO, HttpServletRequest request);

    /**
     * 上传文件分片
     *
     * @param chunkUploadDTO 分片上传DTO
     * @param request        HTTP请求
     * @return 是否上传成功
     */
    boolean uploadChunk(ChunkUploadDTO chunkUploadDTO, HttpServletRequest request);

    /**
     * 合并文件分片
     *
     * @param chunkMergeDTO 分片合并DTO
     * @param request       HTTP请求
     * @return 文件信息
     */
    FileInfoVO mergeChunks(ChunkMergeDTO chunkMergeDTO, HttpServletRequest request);

    /**
     * 获取文件信息
     *
     * @param id 文件ID
     * @return 文件信息
     */
    FileInfoVO getFileInfo(Long id);

    /**
     * 获取文件列表
     *
     * @return 文件信息列表
     */
    List<FileInfoVO> getFileList();

    /**
     * 下载文件
     *
     * @param id       文件ID
     * @param response HTTP响应
     */
    void downloadFile(Long id, HttpServletResponse response);

    /**
     * 预览文件
     *
     * @param id       文件ID
     * @param response HTTP响应
     */
    void previewFile(Long id, HttpServletResponse response);

    /**
     * 删除文件
     *
     * @param id 文件ID
     * @return 是否删除成功
     */
    boolean deleteFile(Long id);

    FileInfoVO checkFileMd5(String md5);
}